/**
 * @file    elog_flash.h
 * @brief   EasyLogger Flash插件头文件
 * @details 本文件定义了EasyLogger Flash存储插件的接口和数据结构，包括：
 *          - Flash日志存储功能接口声明
 *          - 缓冲模式和直写模式配置
 *          - Flash日志读取和清除接口
 *          - Flash存储锁定控制接口
 *          - Flash插件初始化和反初始化接口
 */

#ifndef __ELOG_FLASH_H__
#define __ELOG_FLASH_H__

#include <elog.h>
#include <elog_flash_cfg.h>

#ifdef __cplusplus
extern "C" {
#endif

#if !defined(ELOG_FLASH_BUF_SIZE)
    #error "Please configure RAM buffer size (in elog_flash_cfg.h)"
#endif

/* ---------------------------------------- 版本信息定义 ---------------------------------------- */
#define ELOG_FLASH_SW_VERSION                "V2.0.1"           /* EasyLogger Flash插件软件版本号 */

/* ------------------------------------ Flash插件核心接口函数 ----------------------------------- */
/* elog_flash.c */
ElogErrCode elog_flash_init(void);                              /* Flash插件初始化 */
void elog_flash_output(size_t pos, size_t size);                /* 输出指定位置和大小的Flash日志 */
void elog_flash_output_all(void);                               /* 输出Flash中的所有日志 */
void elog_flash_output_recent(size_t size);                     /* 输出Flash中最近的指定大小日志 */
void elog_flash_set_filter(uint8_t level,const char *tag,const char *keyword);  /* 设置Flash日志过滤器 */
void elog_flash_write(const char *log, size_t size);            /* 将日志写入Flash存储 */
void elog_flash_clean(void);                                    /* 清除Flash中的所有日志 */
void elog_flash_lock_enabled(bool enabled);                     /* 启用或禁用Flash日志缓冲区锁定 */

#ifdef ELOG_FLASH_USING_BUF_MODE
void elog_flash_flush(void);                                    /* 刷新Flash日志缓冲区 */
#endif

/* ----------------------------------- Flash插件移植层接口函数 ----------------------------------- */
/* elog_flash_port.c */
ElogErrCode elog_flash_port_init(void);                         /* Flash插件移植层初始化 */
void elog_flash_port_output(const char *log, size_t size);      /* Flash日志输出移植接口 */
void elog_flash_port_lock(void);                                /* Flash日志缓冲区锁定 */
void elog_flash_port_unlock(void);                              /* Flash日志缓冲区解锁 */

#ifdef __cplusplus
}
#endif

#endif /* __ELOG_FLASH_H__ */
